home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 4
/
Aminet 4 - November 1994.iso
/
aminet
/
dev
/
obero
/
oberon_lib.lha
/
oberon-a
/
source1.lha
/
source
/
ProgInOberon
/
RandomNumbers.mod
Wrap
Text File
|
1994-08-08
|
1KB
|
64 lines
(*
$RCSfile: RandomNumbers.mod $
Description: Random number generator from "Programming In Oberon"
Created by: fjc (Frank Copeland)
$Revision: 1.4 $
$Author: fjc $
$Date: 1994/08/08 16:40:04 $
Copyright © 1990-1993, ETH Zuerich
Copyright © 1994, Frank Copeland.
This file is part of the Oberon-A Library.
See Oberon-A.doc for conditions of use and distribution.
*)
MODULE RandomNumbers;
(*
** $C= CaseChk $I= IndexChk $L+ LongAdr $N= NilChk
** $P= PortableCode $R= RangeChk $S= StackChk $T= TypeChk
** $V= OvflChk $Z= ZeroVars
*)
IMPORT Dos;
VAR z : LONGINT;
(*------------------------------------*)
PROCEDURE Uniform * () : REAL;
CONST a = 16807; m = 2147483647; q = m DIV a; r = m MOD a;
VAR gamma : LONGINT;
BEGIN (* Uniform *)
gamma := a * (z MOD q) - r * (z DIV q);
IF gamma > 0 THEN z := gamma
ELSE z := gamma + m
END;
RETURN z * (1.0 / m)
END Uniform;
(*------------------------------------*)
PROCEDURE InitSeed * (seed : LONGINT);
BEGIN (* InitSeed *)
z := seed
END InitSeed;
(*------------------------------------*)
PROCEDURE TimeSeed * ();
VAR ds : Dos.Date; x : REAL;
BEGIN (* TimeSeed *)
Dos.base.DateStamp (ds);
z := (ds.minute * (60 * Dos.ticksPerSecond)) + ds.tick;
x := Uniform()
END TimeSeed;
BEGIN
z := 314159
END RandomNumbers.